package cqrtplm.aop;

import cqrtplm.constant.RTErrorCodeEnum;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import lombok.SneakyThrows;
import java.util.Map;
import java.util.List;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Component;

@Aspect
@Component
@Slf4j
public class ProductSpecificationClassAOP {

    @Around("execution(* com.hustcad.plm.pdm.iba.controller.TyplmEditableCommonAttributeController.saveEditableCommonAttribute(..))")
    @SneakyThrows
    public Object aroundSaveEditableCommonAttribute(ProceedingJoinPoint joinPoint) {
        // 获取方法参数
        Object[] args = joinPoint.getArgs();

        // 提取 Map<String, List<JSONObject>> 参数
        if (args.length > 0 && args[0] instanceof Map) {
            Map<String, List<JSONObject>> jsonObjectListMap = (Map<String, List<JSONObject>>) args[0];

            // 遍历Map中的所有键值对
            for (Map.Entry<String, List<JSONObject>> entry : jsonObjectListMap.entrySet()) {
                List<JSONObject> jsonObjectList = entry.getValue();

                // 遍历每个JSONObject
                for (JSONObject jsonObject : jsonObjectList) {
                    // 获取typeDisplayName字段
                    String typeDisplayName = jsonObject.getString("typeDisplayName");

                    // 判断是否为"产品型谱"
                    if ("ProductSpectrum".equals(typeDisplayName)) {
                        // 如果是产品型谱，返回错误信息，不执行原方法
                       throw  RTErrorCodeEnum.STATUS_INFO_CONTENT_IS_NULL.getException("产品型谱类型不允许执行此操作");
                    }
                }
            }


        }

        // 继续执行原方法
        return joinPoint.proceed();
    }
}
